// 用户角色权限管理相关模型定义
import { ApiResponse } from './common-model'

/**
 * 用户状态枚举
 */
export enum UserStatus {
  ACTIVE = 0, // 激活
  DISABLED = 1 // 禁用
}

/**
 * 菜单类型枚举
 */
export enum MenuType {
  MENU = 1, // 菜单项
  BUTTON = 0 // 按钮/操作
}

/**
 * 用户模型
 */
export interface User {
  id: number
  login_name: string
  full_name: string
  role_id: number
  role_name?: string
  status: UserStatus
  department?: string
  created_at: string
  updated_at: string
}

/**
 * 用户创建请求
 */
export interface UserCreateRequest {
  login_name: string
  full_name: string
  password: string
  confirm_password: string
  role_id: number
  status?: UserStatus
  department?: string
}

/**
 * 用户更新请求
 */
export interface UserUpdateRequest {
  id: number
  full_name?: string
  role_id?: number
  status?: UserStatus
  department?: string
}

/**
 * 修改密码请求
 */
export interface ChangePasswordRequest {
  old_password: string
  new_password: string
  confirm_password: string
}

/**
 * 重置密码请求
 */
export interface ResetPasswordRequest {
  new_password: string
  confirm_password: string
}

/**
 * 角色模型
 */
export interface Role {
  id: number
  name: string
  description?: string
  created_at: string
  updated_at: string
  permission_ids?: number[] // 权限ID列表（角色详情返回）
  permission_count?: number // 权限数量（列表/操作结果返回）
  permissions?: number[] // 兼容旧字段
}

/**
 * 角色创建请求
 */
export interface RoleCreateRequest {
  name: string
  description?: string
  permission_ids: number[]
}

/**
 * 角色更新请求
 */
export interface RoleUpdateRequest {
  id: number
  name?: string
  description?: string
  permission_ids?: number[]
}

/**
 * 权限模型
 */
export interface Permission {
  id: number
  name: string
  url?: string
  method?: string
  parent_id?: number | null
  level: number
  order: number
  icon?: string
  is_menu: MenuType
  created_at: string
  updated_at: string
  children?: Permission[] // 子权限列表，用于树形结构
}

/**
 * 权限创建请求
 */
export interface PermissionCreateRequest {
  name: string
  url?: string
  method?: string
  parent_id?: number | null
  level: number
  order?: number
  icon?: string
  is_menu: MenuType
}

/**
 * 权限更新请求
 */
export interface PermissionUpdateRequest {
  id: number
  name?: string
  url?: string
  method?: string
  parent_id?: number | null
  level?: number
  order?: number
  icon?: string
  is_menu?: MenuType
}

/**
 * 分页查询参数
 */
export interface PageQueryParams {
  page?: number
  page_size?: number
  keyword?: string
}

/**
 * 分页响应数据
 */
export interface PageResponse<T> {
  items: T[]
  total: number
}

/**
 * 用户查询响应
 */
export interface UserPageResponse extends ApiResponse {
  data: {
    users: User[]
    total: number
  }
}

/**
 * 角色查询响应
 */
export interface RolePageResponse extends ApiResponse {
  data: {
    roles: Role[]
    total: number
  }
}

/**
 * 权限查询响应
 */
export interface PermissionListResponse extends ApiResponse {
  data: Permission[]
}

/**
 * 权限树响应
 */
export interface PermissionTreeResponse extends ApiResponse {
  data: Permission[]
}
